package cn.bs.busuo.front.hotel.service;

import cn.bs.busuo.front.hotel.pojo.param.*;
import cn.bs.busuo.front.hotel.pojo.vo.HotelRoomTypeEnabledVO;
import cn.bs.busuo.front.hotel.pojo.vo.HotelVO;
import cn.bs.busuo.front.hotel.pojo.vo.HotelWorkerVO;
import cn.bs.busuo.front.hotel.pojo.vo.HotelsRoomTypeCheckVO;

import java.util.List;

public interface HotelService {
    /**
     * 新增酒店
     */
    void addNew(AddNewHotelParam addNewHotelParam);

    /**
     * 设置景点附近的酒店
     */
    void setPositionAboutSight(SetHotelPositionAboutSightParam setHotelPositionAboutSightParam);

    /**
     * 设置城市附近的酒店
     */
    void setPositionAboutCity(SetHotelPositionAboutCityParam setHotelPositionAboutCityParam);

    /**
     * 删除酒店(逻辑删除)
     */
    void delete(Long hotelId);

    /**
     * 更新酒店信息
     */
    void update(Long userId,UpdateHotelInformationParam updateHotelInformationParam);

    /**
     * 查询所有酒店
     */
    List<HotelVO> selectAll();

    /**
     * 根据酒店ID查询酒店信息
     */
    HotelVO selectById(Long hotelId);

    /**
     * 根据城市ID查询酒店信息
     */
    List<HotelVO> selectHotelByCityId(Long cityId);

    /**
     * 根据景点ID查询酒店信息
     */
    List<HotelVO> selectHotelBySightId(Long sightId);

    /**
     * 查询未设置城市的酒店
     */
    List<HotelVO> selectHotelWhichNotSetCity();

    /**
     * 查询未设置景点的酒店
     */
    List<HotelVO> selectHotelWhichNotSetSight();

    /**
     * 添加酒店工作人员
     */
    void addHotelWorker(Long userId,AddNewHotelWorkerParam addNewHotelWorkerParam);

    /**
     * 删除酒店工作人员
     */
    void deleteHotelWorker(Long userId,DeleteHotelWorkerParam deleteHotelWorkerParam);

    /**
     * 查询酒店工作人员
     */
    List<HotelWorkerVO> selectHotelWorker(Long hotelId);

    /**
     * 添加酒店房型
     */
    void addRoomType(AddNewRoomTypeParam addNewRoomTypeParam);

    /**
     * 删除酒店房型
     */
    void deleteRoomType(DeleteHotelRoomTypeParam deleteHotelRoomTypeParam);

    /**
     * 查询未审核的房型
     */
    List<HotelsRoomTypeCheckVO> selectRoomTypeWhichNotCheck();

    /**
     * 查询审核过的房型
     */
    List<HotelsRoomTypeCheckVO> selectRoomTypeWhichCheck();

    /**
     * 审核通过房型
     */
    void checkRoomTypeAccess(Long id);

    /**
     * 审核拒绝房型
     */
    void checkRoomTypeRefused(Long id);

    /**
     * 查看某酒店的所有房型
     * @param hotelId
     * @return
     */
    List<HotelRoomTypeEnabledVO> selectHotelRoomType(Long hotelId);

    /**
     * 启用房型
     */
    void enableRoomType(Long id);
    /**
     * 禁用房型
     */
    void disableRoomType(Long id);

    /**
     * 增加房间
     */
    void addRoom(AddNewRoomParam addNewRoomParam);
    /**
     * 减少房间
     */
    void deleteRoom(DeleteRoomParam deleteRoomParam);
}
